// 道具基类
export default class PowerUp {
  static WIDTH = 30
  static HEIGHT = 30
  static SPEED = 2

  constructor(x, y, type) {
    this.x = x
    this.y = y
    this.width = PowerUp.WIDTH
    this.height = PowerUp.HEIGHT
    this.speed = PowerUp.SPEED
    this.type = type
    this.active = true
    this.duration = 5000 // 默认持续时间5秒

    // 视觉效果相关属性
    this.rotation = 0 // 旋转角度
    this.rotationSpeed = 0.05 // 旋转速度
    this.scale = 1 // 缩放比例
    this.scaleDirection = 0.005 // 缩放方向和速度
    this.glowOpacity = 0.7 // 光晕透明度
    this.glowDirection = 0.01 // 光晕透明度变化方向和速度

    // 加载图像
    this.image = new Image()
    this.loadImage()
  }

  loadImage() {
    // 子类需要重写此方法来加载特定的图像
    this.image.src =
      ''
  }

  update() {
    // 更新道具位置
    this.y += this.speed

    // 更新视觉效果
    this.updateVisualEffects()
  }

  // 更新视觉效果
  updateVisualEffects() {
    // 更新旋转
    this.rotation += this.rotationSpeed
    if (this.rotation >= Math.PI * 2) {
      this.rotation = 0
    }

    // 更新缩放
    this.scale += this.scaleDirection
    if (this.scale > 1.2 || this.scale < 0.8) {
      this.scaleDirection *= -1
    }

    // 更新光晕透明度
    this.glowOpacity += this.glowDirection
    if (this.glowOpacity > 0.9 || this.glowOpacity < 0.5) {
      this.glowDirection *= -1
    }
  }

  render(ctx) {
    if (this.active) {
      ctx.save()

      // 设置旋转中心点
      const centerX = this.x + this.width / 2
      const centerY = this.y + this.height / 2

      // 绘制光晕效果
      ctx.beginPath()
      ctx.arc(centerX, centerY, this.width * 0.8 * this.scale, 0, Math.PI * 2)
      ctx.fillStyle = this.getGlowColor()
      ctx.fill()

      // 应用旋转和缩放
      ctx.translate(centerX, centerY)
      ctx.rotate(this.rotation)
      ctx.scale(this.scale, this.scale)
      ctx.translate(-this.width / 2, -this.height / 2)

      // 绘制道具图像
      ctx.drawImage(this.image, 0, 0, this.width, this.height)

      ctx.restore()
    }
  }

  // 获取光晕颜色
  getGlowColor() {
    // 默认光晕颜色，子类可以重写
    return `rgba(255, 255, 255, ${this.glowOpacity})`
  }

  isOutOfScreen() {
    return this.y > 640 // CANVAS_HEIGHT
  }

  apply(player, game) {
    // 子类需要重写此方法来实现特定的道具效果
    console.log(`应用道具效果: ${this.type}`)
    this.active = false

    // 显示获取道具的特效
    this.showPickupEffect(game)
  }

  // 显示获取道具的特效
  showPickupEffect(game) {
    // 在玩家位置创建一个特效
    const centerX = game.player.x + game.player.width / 2
    const centerY = game.player.y + game.player.height / 2

    // 在Game类中添加特效渲染
    game.addPickupEffect({
      x: centerX,
      y: centerY,
      type: this.type,
      radius: 0,
      maxRadius: 50,
      opacity: 1,
      growSpeed: 2,
    })
  }
}
